#ifndef STATE_H
#define STATE_H

#include <QObject>

class State : public QObject
{
	Q_OBJECT
public:
	/**
	 * Konstruktor
	 */
	State();

	/**
	 * Destruktor
	 */
	virtual ~State() {}

	/**
	 * Tryb w jakim moze znajdowac sie stan
	 */
	enum StateType {
		ACTIVE,     //<! Stan jest aktualnie aktywny
		PAUSED,     //<! Dzialanie stany zostalo zatrzymane
		READY,      //<! Stan nie dziala, ale jest gotowy do uruchomienia
		FINISHED    //<! Stan zakonczyl swoje dzialanie
	};

	/**
	 * Aktywowanie stanu
	 */
	virtual void enter() = 0;
	/**
	 * Wylaczanie stanu
	 */
	virtual void exit() = 0;

	/**
	 * Zatrzymanie dzialania stanu
	 */
	virtual void pause();
	/**
	 * Kontynuowanie dzialania zatrzymanego stanu
	 */
	virtual void resume();
	/**
	 * Rozpoczecie dzialania stanu od poczatku
	 */
	virtual void reset();

	/**
	 * Ustawia tryb dzialania stanu
	 * @param state Tryb do ustawienia
	 */
	void setState(const StateType state );
	/**
	 * Zwraca aktualny tryb dzialania stanu.
	 * @return Akturalny tryb
	 */
	StateType getState() const;

protected:
	/**
	 * Tryb w jakim znajduje sie stan
	 */
	StateType state_;
};

#endif // STATE_H
